package com.javasm.sys.impl;

import com.javasm.sys.tree.DeptTreeUtil;
import com.javasm.sys.DepartService;
import com.javasm.sys.dao.DepartDao;
import com.javasm.sys.SysDepart;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;


@Service
public class DepartServiceImpl implements DepartService {
    @Resource
    private DepartDao dd;


    @Override
    public List<SysDepart> getList() {
        List<SysDepart> list = dd.getList();
        List<SysDepart> treeList = DeptTreeUtil.buildTree(list, "-1");
        return treeList;
    }

    @Override
    public boolean insertDept(SysDepart dp) {
        //如果取出的最大id和当前输入的部门id一致，说明已经是最低一层
        //新部门编号+01
        //否则加1
        String maxIdStr = dd.getMaxId(dp.getPid());
//        String maxOrderStr = dd.getMaxOrder(dp.getShowOrder());
        Integer maxId = null;
        Integer maxOrder = null;
        if (maxIdStr.equals(dp.getPid())){
            maxIdStr += "01";
            maxId = Integer.parseInt(maxIdStr);
        }else {
            maxId = Integer.parseInt(maxIdStr)+1;
        }

//        maxOrder = Integer.parseInt(maxOrderStr)+1;

        dp.setDepartId(maxId.toString());
//        dp.setShowOrder(maxOrder.toString());

        return dd.insertdepart(dp);
    }

    @Override
    public boolean delete(String id) {
        Integer integer = null;
        //获取部门所有数据
        List<SysDepart> list = dd.getList();
        //获取到分级部门数据（子部门）
        List<SysDepart> depts = DeptTreeUtil.buildTree(list, id);
        ArrayList<Object> l = new ArrayList<>(10);
        //判断是否存在数据
        if(depts.size()>0){
            for (SysDepart dept : depts){
                l.add(dept.getDepartId());
            }
            //批量删除
            integer =dd.delByIds(l.toArray());
        }
        integer = dd.delById(id);
        return integer>0;
    }

    @Override
    public boolean update(SysDepart add) {
        Integer addDept = dd.updateDept(add);
        return addDept > 0 ;
    }

    @Override
    public SysDepart getDeptId(String id) {

        return dd.getDeptId(id);
    }

    @Override
    public List<SysDepart> getByNameAndStu(SysDepart d) {
        return dd.getByNameAndStu(d);
    }

    @Override
    public SysDepart getById(String id) {
        return dd.selectById(id);
    }

    @Override
    public List<SysDepart> getAlldept() {
        return dd.getdeptall();
    }

}
